package com.hxzy.util.sms;

import cn.hutool.core.util.StrUtil;
import com.hxzy.common.enums.AckCode;
import com.hxzy.common.exception.ServiceException;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.apache.http.util.Asserts;
import org.springframework.util.Assert;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * @Author wy
 * @Description 策略模式
 * @Date 2023/7/11 15:39
 * @Version 1.0
 */

public abstract class SmsRequestReq {

    /**
     * 短信模板
     */
    @Getter
    @Setter
    private String templateId;

    /**
     * 发送短信电话号码
     */
    protected Set<String> phoneNumber=new HashSet<>();

    /**
     * 短信参数
     */
    protected List<String>  paramSet=new ArrayList<>();


    /**
     * 短信模板能数个数
     * @return
     */
    public abstract  int paramsLen();

    /**
     * 获取电话
     * @return
     */
    public String[] getPhone(){
        if(phoneNumber.size()==0){
           throw new ServiceException(AckCode.SMS_MOBILE_NOT_NULL);
        }
        return  phoneNumber.toArray(new String[0]);
    }

    /**
     * 获取参数
     * @return
     */
    public String[]  params(){
        if(this.paramsLen()>0){
            //参数个数与设定模板叁数个数不同的时候就要报错
            if(this.paramSet.size()!=this.paramsLen()){
                AckCode  a=AckCode.SMS_PARAMS_ERROR;
                a.setMsg(StrUtil.format(a.getMsg(),this.templateId));
                throw new ServiceException(a);
            }
            return  paramSet.toArray(new String[0]);
        }
        return null;
    }

}
